package co.edu.uniquindio.gui;

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JSeparator;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;

import co.edu.uniquindio.delegados.Login;
import co.edu.uniquindio.delegados.ParametrizadaDelegado;
import co.edu.uniquindio.delegados.UsuarioDelegado;
import co.edu.uniquindio.logica.Administrador;
import co.edu.uniquindio.logica.Comprador;
import co.edu.uniquindio.logica.Persona;
import co.edu.uniquindio.logica.Vendedor;
/**
 * esta clase representa una ventana para un administrador y usa el patron de diseño Singleton para la creacion de esta
 * @author Andres Felipe Abril
 * @author Luis Enrique Robledo
 */
public class VentanaAdmin extends JFrame implements ActionListener{

	/**
	 * 
	 */ 
	private static final long serialVersionUID = 1L;
	private JPanel contentPane;
	private JPasswordField passwordField;
	private JLabel lblIngresePorFavor;
	private JButton btnAceptar;
	public static VentanaAdmin me;
	private boolean isAdmin;
	private ParametrizadaDelegado param= ParametrizadaDelegado.getParametrizadaDelegado();
	private UsuarioDelegado  user=UsuarioDelegado.getUsuarioDelegado();
	private Persona persona;
	private Administrador admin;
	private Login login=Login.getLogin();

	private JTextField textField;
	{
		//Set Look & Feel
		try {
			javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
		} catch(Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					VentanaAdmin frame = new VentanaAdmin();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public VentanaAdmin() {

		super();
		initGUI();	
	}

	/**
	 * este metodo em permite crear instancia unica de la clase VentanaAdmin
	 * @return
	 */
	public static VentanaAdmin getVentanaAdmin()
	{
		if (me == null)
			me = new VentanaAdmin();
		return me;	
	} 
	/**
	 * este metodo inicializa los componentes de la clase
	 */
	public void initGUI()
	{
		try {
			setTitle("Ingreso");
			setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			setBounds(100, 100, 450, 300);

			contentPane = new JPanel();
			contentPane.setBackground(Color.BLACK);
			contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
			setContentPane(contentPane);
			contentPane.setLayout(null);

			JLabel label = new JLabel("");
			label.setIcon(new ImageIcon(VentanaAdmin.class.getResource("/co/edu/uniquindio/imagenes/Administrador.png")));
			label.setBounds(285, 25, 128, 118);
			contentPane.add(label);

			JLabel lblComoDeseaIngresar = new JLabel("Ingresar");
			lblComoDeseaIngresar.setForeground(Color.WHITE);
			lblComoDeseaIngresar.setBounds(29, 25, 244, 27);
			contentPane.add(lblComoDeseaIngresar);

			lblIngresePorFavor = new JLabel("Ingrese por favor su Contrasenia");
			lblIngresePorFavor.setForeground(Color.WHITE);
			lblIngresePorFavor.setBounds(29, 159, 257, 27);
			lblIngresePorFavor.setVisible(true);
			contentPane.add(lblIngresePorFavor);



			passwordField = new JPasswordField();
			passwordField.setBounds(29, 191, 186, 27);
			passwordField.setVisible(true);
			contentPane.add(passwordField);


			btnAceptar = new JButton("aceptar");
			btnAceptar.setToolTipText("click para acceder");
			btnAceptar.setBounds(304, 172, 117, 24);
			contentPane.add(btnAceptar);

			JLabel lblIngreseSuNombre = new JLabel("Ingrese su nombre de usuario");
			lblIngreseSuNombre.setForeground(Color.WHITE);
			lblIngreseSuNombre.setBounds(29, 64, 244, 16);
			contentPane.add(lblIngreseSuNombre);

			textField = new JTextField();
			textField.setBounds(29, 92, 186, 28);
			contentPane.add(textField);
			textField.setColumns(10);

			JSeparator separator = new JSeparator();
			separator.setForeground(Color.ORANGE);
			separator.setBounds(29, 50, 244, 2);
			contentPane.add(separator);
			btnAceptar.addActionListener(this);	
		} catch (Exception e) {
			e.printStackTrace();
		}


	}
	/**
	 * este metodo me permite manejar y/o controlan los eventos que generan los componentes de la clase 
	 */

	public void actionPerformed(ActionEvent e)
	{

		if(e.getSource()==btnAceptar)
		{
			String contrasenia = passwordField.getText(); 
			String userName= textField.getText();

			try {
				admin=param.validarA(contrasenia);
				if(userName.equals(admin.getNombre()))
				{
				VentanaPrincipal frame = VentanaPrincipal.getVentanaPrincipal();
				login.setPersona(admin);
				frame.setMiAdmin(admin);
				frame.setVisible(true);
				this.setVisible(false);
				this.enable();
				JOptionPane.showMessageDialog(this, "Bienvenido  Administrador "+ admin.getNombre());
				}
				else
					JOptionPane.showMessageDialog(this,"username incorrecto",null,JOptionPane.CANCEL_OPTION);
			} catch (Exception e2) {
				//JOptionPane.showMessageDialog(this, e2.getMessage());

			}
			try {
				persona=user.obtenerP(contrasenia,userName);
				if(persona instanceof Vendedor)
				{
					Vendedor ven =(Vendedor)persona;
					System.out.println("aqui entra   "+persona.getNombre());
					VentanaPrincipal frame = VentanaPrincipal.getVentanaPrincipal();
					login.setPersona(ven);
					frame.setMiVendedor(ven);
					frame.setVisible(true);
					this.setVisible(false);
					this.enable();

				}
				else if (persona instanceof Comprador) 
				{
					Comprador comp=(Comprador)persona;
					System.out.println("loko");
					VentanaPrincipal frame = VentanaPrincipal.getVentanaPrincipal();
					login.setPersona(comp);
					frame.setMiComprador(comp);
					frame.setVisible(true);
					this.setVisible(false);
					this.enable();
				}

			} catch (Exception e2) {
				// TODO: handle exception
			}

		}


	}
	public void setAdmin(boolean isAdmin) 
	{
		this.isAdmin = isAdmin;
	}

	public boolean isAdmin() 
	{
		return isAdmin;
	}
	
}
